package com.hk.core.data.orm.aspect;

import java.lang.annotation.*;

/**
 * 数据库乐观锁控制，注意：该注解需要加在 controller层加，因为Spring 事务管理的上下文是从resource层开始建立的，
 * 如果在 有事物的方法上加了，不会catch {@link org.springframework.orm.ObjectOptimisticLockingFailureException}异常。
 * <p>
 * 也可以使用 Hibernate 自带的 {@link org.hibernate.annotations.OptimisticLocking} 来，但没有重试机制
 *
 * @author Kevin
 * @see OptimisticLockInterceptor
 * @see org.springframework.orm.ObjectOptimisticLockingFailureException
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RetryOnOptimisticLockingFailure {

    /**
     * 重试最多次数：最小值 为1
     */
    int maxRetryAttempts() default 5;
}
